iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
IT 管理

API Gateway:微服務世界的守護者系列 第 24

Day 24 - K8s APISIX Autoscale 設定

  • 分享至 

  • xImage
  •  

Deployment & HPA

在 Kubernetes 上部署 Apache APISIX 並進行自動縮放 (autoscaling),你需要配置 HorizontalPodAutoscaler (HPA)。HPA 根據 CPU 使用率或其他指標自動調整 Apache APISIX pod 的數量。以下是基本的 YAML 配置範例,展示如何設置 Apache APISIX 的 HPA。

1. 設定 Deployment (假設你已經有 APISIX 的 Deployment)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apisix
  labels:
    app: apisix
spec:
  replicas: 2  # 初始 pod 數量
  selector:
    matchLabels:
      app: apisix
  template:
    metadata:
      labels:
        app: apisix
    spec:
      containers:
        - name: apisix
          image: apache/apisix:latest
          ports:
            - containerPort: 9080
          resources:
            requests:
              cpu: "500m"
              memory: "512Mi"
            limits:
              cpu: "1000m"
              memory: "1Gi"

2. 設定 HPA

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: apisix-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: apisix  # 對應 Deployment 名稱
  minReplicas: 2  # 最小 pod 數量
  maxReplicas: 10  # 最大 pod 數量
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50  # 當 CPU 使用率超過 50% 時觸發擴展

步驟簡介:

  1. Deployment: 定義 Apache APISIX 的基本部署,包括資源限制。
  2. HPA: 根據 CPU 使用率自動調整 pod 數量。你可以根據需求調整 minReplicasmaxReplicas,或依賴不同的指標來決定何時進行縮放。

當 Apache APISIX 的負載增加,CPU 使用率超過 50% 時,HPA 會自動增加 pod 的數量,以便應對高負載。


DeploymentHorizontalPodAutoscaler 一起寫在同一個 YAML 文件中,這樣在應用時只需一次 kubectl apply 就能同時部署 Apache APISIX 並設定自動縮放。以下是將兩者結合的 YAML 範例:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: apisix
  labels:
    app: apisix
spec:
  replicas: 2  # 初始 pod 數量
  selector:
    matchLabels:
      app: apisix
  template:
    metadata:
      labels:
        app: apisix
    spec:
      containers:
        - name: apisix
          image: apache/apisix:latest
          ports:
            - containerPort: 9080
          resources:
            requests:
              cpu: "500m"
              memory: "512Mi"
            limits:
              cpu: "1000m"
              memory: "1Gi"
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: apisix-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: apisix  # 對應 Deployment 名稱
  minReplicas: 2  # 最小 pod 數量
  maxReplicas: 10  # 最大 pod 數量
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50  # 當 CPU 使用率超過 50% 時觸發擴展

說明:

  • --- 是用來分隔多個 Kubernetes 資源的標記符號。
  • 這個 YAML 文件包含了 DeploymentHorizontalPodAutoscaler,當你執行 kubectl apply -f 時,Kubernetes 會依序處理這兩個資源。

這樣做的好處是可以在同一個文件中管理所有配置,保持配置的集中和簡潔。

參考

https://chatgpt.com/share/67055439-7008-8001-be3e-60cd2cf8309f


上一篇
Day 23 - 普米 & Grafana
系列文
API Gateway:微服務世界的守護者24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言